// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS d.file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE d.file.

import 'package:test/test.dart';

import 'package:path/path.dart' as path;
import 'package:pub/src/io.dart';

import '../descriptor.dart' as d;
import '../test_pub.dart';

main() {
  test('prints the local paths to all packages in the lockfile', () async {
    await servePackages((builder) => builder.serve("bar", "1.0.0"));

    await d
        .dir("foo", [d.libDir("foo"), d.libPubspec("foo", "1.0.0")]).create();

    await d.dir(appPath, [
      d.appPubspec({
        "foo": {"path": path.join(d.sandbox, "foo")},
        "bar": "any"
      })
    ]).create();

    await pubGet();

    await
        // Note: Using canonicalize here because pub gets the path to the
        // entrypoint package from the working directory, which has had symlinks
        // resolve. On Mac, "/tmp" is actually a symlink to "/private/tmp", so we
        // need to accomodate that.
        await runPub(args: [
      "list-package-dirs",
      "--format=json"
    ], outputJson: {
      "packages": {
        "foo": path.join(d.sandbox, "foo", "lib"),
        "bar": path.join(d.sandbox, cachePath, "hosted",
            "localhost%58${globalServer.port}", "bar-1.0.0", "lib"),
        "myapp": canonicalize(path.join(d.sandbox, appPath, "lib"))
      },
      "input_files": [
        canonicalize(path.join(d.sandbox, appPath, "pubspec.lock")),
        canonicalize(path.join(d.sandbox, appPath, "pubspec.yaml"))
      ]
    });
  });
}
